// #ifndef TIMERWORKER_H
// #define TIMERWORKER_H
// #include"mymultisignalchart.h"
// #include <QThread>
// #include<QMutex>
// #include <QDateTime>
// #include "chart.h"
// #include "chartview.h"
// #include <QApplication>
// #include <QDateTimeAxis>
// #include <QLineSeries>
// #include <QRandomGenerator>
// #include <QChart>
// #include <QChartView>
// #include <QMainWindow>
// #include <cmath>
// #include <QtMath>
// #include <QValueAxis>
// #include <QValueAxis>
// #include <QDate>
// #include<QDebug>
// #include <QTimer>
// #include <QEventLoop>
// #include<QVBoxLayout>
// #include<QtConcurrent>

// class TimerWorker : public QObject {
//     Q_OBJECT
// public:
//     TimerWorker(QLineSeries *series,Chart *chart) : series(series),charts(chart) {}
//     QMutex mutex;
// public slots:

//     void onTimeout()
//     {
//         QMutexLocker locker(&mutex); // 自动加锁和解锁
//         try{
//   // 使用 QtConcurrent 进行异步处理
//             // 在这里执行定时器超时的操作

//             QVector<QPointF> points = series->pointsVector();
//             int count = points.count();
//             // 检查 points 的大小是否达到 4000
//             // if (count >= 4000) {
//             //     // 清除前 2000 个点
//             //   //  points.remove(0, 20);
//             // }
//             qreal inix = qreal(count);
//             qreal inxy1 = 3*qSin(M_PI / 360 * inix*8) + 3;
//             points.append( QPointF(inix, inxy1));
//             if(count>0 )
//             {
//                 if(count>1440)
//                 {
//                     if((count%1440) == 0)
//                     {
//                         charts->scroll(0, 0);
//                     }
//                     charts->scroll(1, 0);
//                 }
//             }
//             series->replace(points);
//         }
//         catch (const std::exception &e) {
//             qDebug() << "Exception caught:" << e.what();
//         }
//         //program stuck at 3min,add qdebug cout;
//         qDebug() << "Timer timeout in thread:" << QThread::currentThread()<<"["<<series->count()<<"]";
//     }
// private:
//     QLineSeries *series;
//     Chart *charts;

// };
// #endif // TIMERWORKER_H
#ifndef TIMERWORKER_H
#define TIMERWORKER_H
#include"mymultisignalchart.h"
#include <QThread>
#include<QMutex>
#include <QDateTime>
#include "chart.h"
#include "chartview.h"
#include <QApplication>
#include <QDateTimeAxis>
#include <QLineSeries>
#include <QRandomGenerator>
#include <QChart>
#include <QChartView>
#include <QMainWindow>
#include <cmath>
#include <QtMath>
#include <QValueAxis>
#include <QValueAxis>
#include <QDate>
#include<QDebug>
#include <QTimer>
#include <QEventLoop>
#include<QVBoxLayout>
#include<QWriteLocker>

class TimerWorker : public QObject {
    Q_OBJECT

public:
    TimerWorker(QLineSeries *series,Chart *chart) : series(series),charts(chart) {}

public slots:
    void onTimeout() {
         QWriteLocker locker(&RWlock);
        // 在这里执行定时器超时的操作
        QVector<QPointF> points = series->pointsVector();
        int count = points.count();
        if(count < 0)
        {
            for(int j=0;j<1;j++)
            {
                qreal inix = qreal(j);
                qreal inxy1 = 3*qSin(M_PI / 360 * inix*8) + 3;
                points.append( QPointF(inix, inxy1));
            }
        }
        else
        {
            int reg = count /1;
            for(int j=reg*1;j<reg*1+1;j++)
            {
                qreal inix = qreal(j);
                qreal inxy1 = 3*qSin(M_PI / 360 * inix*8) + 3;
                points.append( QPointF(inix, inxy1));
            }
            if(count>0 )
            {
                if(count>1440  )
                {
                    if(count%1440 == 0)
                    {
                        charts->scroll(0, 0);
                    }
                    charts->scroll(1, 0);
                }
            }
        }
        series->replace(points);
        qDebug() << "t" <<points.count();
    }
private:
    QLineSeries *series;
    Chart *charts;
    mutable QReadWriteLock RWlock;
};
#endif // TIMERWORKER_H
